import Main from '@/components/main'
import parentView from '@/components/parent-view'

/**
 * iview-admin中meta除了原生参数外可配置的参数:
 * meta: {
 *  title: { String|Number|Function }
 *         显示在侧边栏、面包屑和标签栏的文字
 *         使用'{{ 多语言字段 }}'形式结合多语言使用，例子看多语言的路由配置;
 *         可以传入一个回调函数，参数是当前路由对象，例子看动态路由和带参路由
 *  hideInBread: (false) 设为true后此级路由将不会出现在面包屑中，示例看QQ群路由配置
 *  hideInMenu: (false) 设为true后在左侧菜单不会显示该页面选项
 *  notCache: (false) 设为true后页面在切换标签后不会缓存，如果需要缓存，无需设置这个字段，而且需要设置页面组件name属性和路由配置的name一致
 *  access: (null) 可访问该页面的权限数组，当前路由设置的权限会影响子路由
 *  icon: (-) 该页面在左侧菜单、面包屑和标签导航处显示的图标，如果是自定义图标，需要在图标名称前加下划线'_'
 *  beforeCloseName: (-) 设置该字段，则在关闭当前tab页时会去'@/router/before-close.js'里寻找该字段名对应的方法，作为关闭前的钩子函数
 * }
 */

export default [
  {
    path: '/login',
    name: 'login',
    meta: {
      title: 'Login - 登录',
      hideInMenu: true
    },
    component: () => import('@/view/login/login.vue')
  },
  {
    path: '/',
    name: '_home',
    redirect: '/home',
    component: Main,
    meta: {
      hideInMenu: true,
      notCache: true
    },
    children: [
      {
        path: '/home',
        name: 'home',
        meta: {
          hideInMenu: true,
          title: '首页',
          notCache: true,
          icon: 'md-home'
        },
        component: () => import('@/view/single-page/home')
      }
    ]
  },
  {
    path: '/adminSys',
    name: 'adminSys',
    meta: {
      icon: 'ios-settings',
      access: ['adminSys'],
      showAlways: true,
      title: '权限管理系统'
    },
    component: Main,
    children: [
      {
        path: 'baseManager',
        name: 'baseManager',
        meta: {
          access: ['baseManager'],
          icon: 'md-build',
          showAlways: true,
          title: '基础配置管理'
        },
        component: parentView,
        children: [
          { path: 'myAccount', name: 'myAccount', meta: { icon: 'md-person', title: '我的账户', access: ['myAccount'] }, component: () => import('@/view/admin/myAccount/index.vue') },
          { path: 'userManager', name: 'userManager', meta: { icon: 'md-people', title: '用户管理', access: ['userManager'] }, component: () => import('@/view/admin/user/index.vue') },
          { path: 'menuManager', name: 'menuManager', meta: { icon: 'md-menu', title: '菜单管理', access: ['menuManager'] }, component: () => import('@/view/admin/menu/index.vue') },
          { path: 'roleManager', name: 'roleManager', meta: { icon: 'md-construct', title: '角色权限管理', access: ['roleManager'] }, component: () => import('@/view/admin/role/index.vue') },
          { path: 'roleTypeManager', name: 'roleTypeManager', meta: { icon: 'md-options', title: '角色类型管理', access: ['roleTypeManager'] }, component: () => import('@/view/admin/roleType/index.vue') },
          { path: 'dictManager', name: 'dictManager', meta: { icon: 'md-book', title: '数据字典', access: ['dictManager'] }, component: () => import('@/view/admin/dict/index.vue') },
          { path: 'gateLogManager', name: 'gateLogManager', meta: { icon: 'md-paper', title: '操作日志', access: ['gateLogManager'] }, component: () => import('@/view/admin/gateLog/index.vue') },
          { path: 'tenantManager', name: 'tenantManager', meta: { icon: 'md-filing', title: '租户管理', access: ['tenantManager'] }, component: () => import('@/view/admin/tenant/index.vue') },
          { path: 'applicationManager', name: 'applicationManager', meta: { icon: 'md-apps', title: '应用管理', access: ['applicationManager'] }, component: () => import('@/view/admin/application/index.vue') },
          { path: 'appOrderManager', name: 'appOrderManager', meta: { icon: 'md-list-box', title: '账户订单管理', access: ['appOrderManager'] }, component: () => import('@/view/admin/appOrder/index.vue') },
          { path: 'jobManager', name: 'jobManager', meta: { icon: 'md-timer', title: '定时作业管理', access: ['jobManager'] }, component: () => import('@/view/admin/job/index.vue') }
        ]
      },
      {
        path: 'orgManager',
        name: 'orgManager',
        meta: {
          icon: 'md-git-network',
          access: ['orgManager'],
          showAlways: true,
          title: '组织部门管理'
        },
        component: parentView,
        children: [
          {
            path: 'departManager',
            name: 'departManager',
            meta: {
              icon: 'md-funnel',
              access: ['departManager'],
              title: '部门管理'
            },
            component: () => import('@/view/admin/depart/index.vue')
          }
        ]
      },
      {
        path: 'authManager',
        name: 'authManager',
        meta: {
          icon: 'md-ribbon',
          access: ['serviceManager'],
          showAlways: true,
          title: '服务管理'
        },
        component: parentView,
        children: [
          {
            path: 'gatewayManager',
            name: 'gatewayManager',
            meta: {
              icon: 'md-locate',
              access: ['gatewayManager'],
              title: '网关路由管理'
            },
            component: () => import('@/view/service/gatewayRoute/index.vue')
          },
          {
            path: 'apiManager',
            name: 'apiManager',
            meta: {
              icon: 'md-document',
              access: ['apiManager'],
              title: '接口文档'
            },
            component: () => import('@/view/service/api/index.vue')
          },
          { path: 'oauthClientDetailsManager',
            name: 'oauthClientDetailsManager',
            meta: { icon: 'md-key', title: '客户端管理', access: ['oauthClientDetailsManager'] },
            component: () => import('@/view/service/oauthClientDetails/index.vue') }
        ]
      },
      {
        path: 'monitorManager',
        name: 'monitorManager',
        meta: {
          icon: 'md-color-palette',
          access: ['monitorManager'],
          showAlways: true,
          title: '监控运维管理'
        },
        component: parentView,
        children: [
          { path: 'serviceRegisterManager',
            name: 'serviceRegisterManager',
            meta: { icon: 'md-pulse', title: '服务注册管理', access: ['serviceRegisterManager'] },
            component: () => import('@/view/monitor/serviceRegister/index.vue')
          },
          {
            path: 'serviceMonitorManager',
            name: 'serviceMonitorManager',
            meta: {icon: 'md-pulse', access: ['apiManager'], title: ' 服务监控管理'},
            component: () => import('@/view/monitor/service/index.vue')
          },
          {
            path: 'serviceZipkinManager',
            name: 'serviceZipkinManager',
            meta: {icon: 'md-pulse', access: ['apiManager'], title: ' 服务链路监控'},
            component: () => import('@/view/monitor/link/index.vue')
          }
        ]
      }
    ]
  },
  {
    path: '/argu',
    name: 'argu',
    meta: {
      hideInMenu: true
    },
    component: Main,
    children: [
      {
        path: 'params/:id',
        name: 'params',
        meta: {
          icon: 'md-flower',
          title: route => `{{ params }}-${route.params.id}`,
          notCache: true,
          beforeCloseName: 'before_close_normal'
        },
        component: () => import('@/view/argu-page/params.vue')
      },
      {
        path: 'query',
        name: 'query',
        meta: {
          icon: 'md-flower',
          title: route => `{{ query }}-${route.query.id}`,
          notCache: true
        },
        component: () => import('@/view/argu-page/query.vue')
      }
    ]
  },
  {
    path: '/401',
    name: 'error_401',
    meta: {
      hideInMenu: true
    },
    component: () => import('@/view/error-page/401.vue')
  },
  {
    path: '/500',
    name: 'error_500',
    meta: {
      hideInMenu: true
    },
    component: () => import('@/view/error-page/500.vue')
  },
  {
    path: '*',
    name: 'error_404',
    meta: {
      hideInMenu: true
    },
    component: () => import('@/view/error-page/404.vue')
  }
]
